/**
 * Software License, Version 1.0
 * 
 * Copyright 2003 The Trustees of Indiana University.  All rights reserved.
 * 
 *
 *Redistribution and use in source and binary forms, with or without 
 *modification, are permitted provided that the following conditions are met:
 *
 *1) All redistributions of source code must retain the above copyright notice,
 * the list of authors in the original source code, this list of conditions and
 * the disclaimer listed in this license;
 *2) All redistributions in binary form must reproduce the above copyright 
 * notice, this list of conditions and the disclaimer listed in this license in
 * the documentation and/or other materials provided with the distribution;
 *3) Any documentation included with all redistributions must include the 
 * following acknowledgement:
 *
 *"This product includes software developed by the Community Grids Lab. For 
 * further information contact the Community Grids Lab at 
 * http://communitygrids.iu.edu/."
 *
 * Alternatively, this acknowledgement may appear in the software itself, and 
 * wherever such third-party acknowledgments normally appear.
 * 
 *4) The name Indiana University or Community Grids Lab or NaradaBrokering, 
 * shall not be used to endorse or promote products derived from this software 
 * without prior written permission from Indiana University.  For written 
 * permission, please contact the Advanced Research and Technology Institute 
 * ("ARTI") at 351 West 10th Street, Indianapolis, Indiana 46202.
 *5) Products derived from this software may not be called NaradaBrokering, 
 * nor may Indiana University or Community Grids Lab or NaradaBrokering appear
 * in their name, without prior written permission of ARTI.
 * 
 *
 * Indiana University provides no reassurances that the source code provided 
 * does not infringe the patent or any other intellectual property rights of 
 * any other entity.  Indiana University disclaims any liability to any 
 * recipient for claims brought by any other entity based on infringement of 
 * intellectual property rights or otherwise.  
 *
 *LICENSEE UNDERSTANDS THAT SOFTWARE IS PROVIDED "AS IS" FOR WHICH NO 
 *WARRANTIES AS TO CAPABILITIES OR ACCURACY ARE MADE. INDIANA UNIVERSITY GIVES
 *NO WARRANTIES AND MAKES NO REPRESENTATION THAT SOFTWARE IS FREE OF 
 *INFRINGEMENT OF THIRD PARTY PATENT, COPYRIGHT, OR OTHER PROPRIETARY RIGHTS. 
 *INDIANA UNIVERSITY MAKES NO WARRANTIES THAT SOFTWARE IS FREE FROM "BUGS", 
 *"VIRUSES", "TROJAN HORSES", "TRAP DOORS", "WORMS", OR OTHER HARMFUL CODE.  
 *LICENSEE ASSUMES THE ENTIRE RISK AS TO THE PERFORMANCE OF SOFTWARE AND/OR 
 *ASSOCIATED MATERIALS, AND TO THE PERFORMANCE AND VALIDITY OF INFORMATION 
 *GENERATED USING SOFTWARE.
 */
package cgl.narada.wsinfra.messaging.widget.wse;

import java.util.Calendar;

import org.apache.xmlbeans.XmlCursor;

import cgl.narada.wsinfra.messaging.widget.WseSubscription;
import cgl.narada.wsinfra.messaging.wse.WseFrameworkIndicator;
import cgl.narada.wsinfra.schemas.addressing.EndpointReferenceType;
import cgl.narada.wsinfra.schemas.eventing.FilterType;
import cgl.narada.wsinfra.wse.matching.SubscriptionEntry;

/**
 * 
 * @author Shrideep Pallickara
 *
 */
public class WseSubscriptionEntry extends WseFrameworkIndicator 
	implements WseSubscription {
	
	 private String identifier;
	 private String deliveryMode = "http://schemas.xmlsoap.org/ws/2004/08/eventing/DeliveryModes/Push";
	 private FilterType filter;
	 private EndpointReferenceType source, sink, subscriptionManager, endTo;
	 private Calendar expiresAt;
	 
	 private String filterDialect;
	 private String filterConstraint;
	 
	 public WseSubscriptionEntry(SubscriptionEntry subscriptionEntry) {
		 identifier = subscriptionEntry.getIdentifier();
		 filter = subscriptionEntry.getFilter();
		 XmlCursor filterCursor = filter.newCursor();
	    filterConstraint = filterCursor.getTextValue();
	    filterCursor.dispose();
	    filterDialect = filter.getDialect();
	    
	    source = subscriptionEntry.getSource();
	    sink = subscriptionEntry.getSink();
	    subscriptionManager = subscriptionEntry.getSubscriptionManager();
	    endTo = subscriptionEntry.getEndTo();
	    expiresAt = subscriptionEntry.getExpiresAt();
	 }
	 
	 
	 /** Returns the EPR to which the publisher will send a SubscriptionEnd response
	  *  to.*/
	 public EndpointReferenceType getEndToEPR() {
		return endTo;
	 }

	 /** Retrieves the delivery mode associated with this subscription. */
	public String getDeliveryMode() {
		return deliveryMode;
	}

	/** Retrieves the identifier associated with this subscription. */
	public String getIdentifier() {
		return identifier;
	}
	
	/** Returns the EPR associated with the publisher/source of notifications. */
	public EndpointReferenceType getPublisherEPR() {
		return source;
	}

	/** Returns the EPR associated with the Subscription Manager */
	public EndpointReferenceType getSubscriptionManagerEPR() {
		return subscriptionManager;
	}

	
	public EndpointReferenceType getSubscriberEPR() {
		return sink;
	}
	
	/** Returns the dialect associated with the registered Filter. */
	public String getFilterDialect() {
		return filterDialect;
	}

	/** Returns the constraint associated with the registered Filter. */
	public String getFilterExpression() {
		return filterConstraint;
	}

	/** Returns the time at which this subscription will expire. */
	public Calendar getInitialExpirationTime() {
		return expiresAt;
	}
	
	public String toString() {
		String stringRep = "Identifier = " + identifier + "Delivery Mode =" + deliveryMode
		+ "\n\tFilter Dialect=" + filterDialect +
		"\n\tFilter Constraint = " + filterConstraint + 
		"\n\tSource =" + source.getAddress() +
		"\n\tSINK =" + sink.getAddress() + 
		"\n\tSubscriptionManager =" + subscriptionManager.getAddress() +
		"\n\tExpires AT =" + expiresAt;
		return stringRep;
	}

	
}
